/*
    ES5中定义函数有三种方式
    1、声明式函数
    2、函数表达式
    3、立即调用函数表达式(IIFE)
    ES6中增加了箭头函数的写法
*/
/*
  声明式函数
  语法：function 函数名称(参数列表){
    [return 返回值]
  }
  调用:函数名()
*/

/*
  函数表达式
  语法:const 变量名=function(){

  }
  调用:变量名()
*/
// fn1()
// function fn1(){
//     console.log('fn1');
// }

// fn2()
// const fn2=function(){
//     console.log('fn2');
// }

/*
    函数表达式和声明式函数有和区别？
    函数表达式不能进行函数的提升，声明式函数可以进行函数的提升
*/
/**
 * 立即调用函数表达式,在ES5中使用立即调用函数表达式是为了解决块级作用域的问题
 */
// ;(function(arg1,arg2){
//     console.log('arg1',arg1);
//     console.log('arg2',arg2);
// })(21,34)
// ;(function(arg1,arg2){
//     console.log('arg1',arg1);
//     console.log('arg2',arg2);
// })(55,34)

/*
 * 箭头函数
   语法定义:const 变量=(形参1,形参2,...,形参n)=>{
    [return 返回值]
   }
   调用:变量名()
   箭头函数的规定
   1、如果形参的个数是一个，可以省略小括号
      1.1 特别注意的是没有参数，或者有多个参数是不能省略的
      1.2 如果形参是一个结构的对象，是不能省略小括号的
   2、关于return的省略
      2.1 如果函数体内的内容只有一行，可以将return和{}都省略掉
      2.2 可以在箭头之后带上小括号，将内容括起来
 */
// const fn1=({name,age})=>{
//     console.log('fn1....箭头函数',name,age);
// }
// fn1({name:'Giles',age:23})
// const fn1=(arg1)=>(arg1+1)
// console.log(fn1(23)); 





